/**
 * 上下文环境
 */
let ctxPath = '';

/**
 * 搜索信息，展开，收起
 */
$('legend').click(function () {
    $('#search-form').slideToggle('1000');
});

/**
 * 显示搜索条件
 */
$('body').on('click', '.search-show', function () {
    $('body .search-box').show();
    $('body .search-show').hide();
    $('body .search-hide').show();
});

/**
 * 隐藏搜索条件
 */
$('body').on('click', '.search-hide', function () {
    $('body .search-box').hide();
    $('body .search-show').show();
    $('body .search-hide').hide();
});

/**
 * 图片展示
 */
$('body').on('click', '.avatar-show', function () {
    top.previewImg($(this).attr('src'));
});

/**
 * 拖动移动图片
 * @param obj
 */
var dragImg = function(obj) {

    let gapX;
    let gapY;

    // 绑定鼠标按下事件
    obj.bind("mousedown", start);

    // 鼠标按下事件
    function start(event) {
        // 判断是否点击鼠标左键
        if (event.button == 0) {
            /*
             * clientX和clientY代表鼠标当前的横纵坐标
             * offset()该方法返回的对象包含两个整型属性：top 和 left，以像素计。此方法只对可见元素有效。
             * bind()绑定事件，同样unbind解绑定，此效果的实现最后必须要解绑定，否则鼠标松开后拖拽效果依然存在
             * gapX获取当前鼠标横坐标和对象离屏幕左侧距离之差（也就是left）值，
             * gapY和getX同样道理，这两个差值就是鼠标相对于对象的定位，因为拖拽后鼠标和拖拽对象的相对位置是不变的
             */
            gapX = event.clientX - obj.position().left;
            gapY = event.clientY - obj.position().top;
            // movemove事件必须绑定到$(document)上，鼠标移动是在整个屏幕上的
            $(document).bind("mousemove", move);
            // 此处的$(document)可以改为obj
            $(document).bind("mouseup", stop);
        }
        // 阻止默认事件或冒泡
        return false;
    }

    // 鼠标移动事件
    function move(event) {
        obj.css({
            "top": (event.clientY - gapY) + "px",
            "left": (event.clientX - gapX) + "px"
        });
        // 阻止默认事件或冒泡
        return false;
    }

    /**
     * 鼠标松开事件
     */
    function stop() {
        // 解绑定，这一步很必要，前面有解释
        $(document).unbind("mousedown", start);
        $(document).unbind("mousemove", move);
        $(document).unbind("mouseup", stop);
    }
}
/**
 * 给图片预览绑定事件
 */
dragImg($('#asurplus-preview-img', top.document));

/**
 * 鼠标滚动事件
 */
$(document).on("mousewheel DOMMouseScroll", function (event) {
    // 判断是放大还是缩小
    let scrollType = (event.originalEvent.wheelDelta && (event.originalEvent.wheelDelta > 0 ? 1 : -1)) || (event.originalEvent.detail && (event.originalEvent.detail > 0 ? -1 : 1));
    // 如果是放大
    if (scrollType > 0) {
        resizeImg($('#asurplus-preview-img'), false)
    }
    // 如果是缩小
    else if (scrollType < 0) {
        resizeImg($('#asurplus-preview-img'), true)
    }
});


/**
 * 放大缩小图片
 */
function resizeImg(node, isSmall){
    // 放大
    if(!isSmall){
        $(node).stop().animate({
            width: $(node).width() * 1.3
        }, 300);
    }
    // 缩小
    else{
        $(node).stop().animate({
            width: $(node).width() * 0.7
        }, 300);
    }
}

/**
 * 上传图片组件
 */
$('body').on('change', '.upload-container', function () {
    // 文件对象
    let formData = new FormData();
    formData.append("files", $(this)[0].files[0]);
    Asurplus.upload({
        url: ctxPath + 'sys/sys-minio/uploadFileAjax',
        data: formData,
        dir: $(this).data('dir')
    }, (res) => {
        $(this).parent().find("input[type='hidden']").val(res.data);
        $(this).parent().css('background-image', 'url(' + res.data + ')');
        hideUploadDiv_i();
    });
});

/**
 * 上传组件图标显示隐藏的问题
 */
function hideUploadDiv_i() {
    let dom = $('body .upload_div');
    if(!!dom){
        let data;
        for(let i = 0,len = dom.length;i < len;i++){
            data = $(dom[i]).find("input[type='hidden']").val();
            if(!data){
                $(dom[i]).find("i").css('opacity', 1);
            }
            if(!!data){
                $(dom[i]).find("i").css('opacity', 0);
            }
        }
    }
}

/**
 * 页面加载完成之后再执行
 */
window.onload = function() {
    hideUploadDiv_i();
};

/**
 * 去掉字符串的HTML标签
 */
function filterHTMLTag(str) {
    let msg = str.replace(/<\/?[^>]*>/g, '');
    msg = msg.replace(/[|]*\n/, '');
    msg = msg.replace(/&nbsp;/ig, '');
    return msg;
}

/**
 * 获取url中的参数
 */
function getUrlParam(variable) {
    let query = window.location.search.substring(1);
    let vars = query.split("&");
    for (let i = 0; i < vars.length; i++) {
        let pair = vars[i].split("=");
        if (pair[0] == variable) {
            return pair[1];
        }
    }
    return ('');
}

/**
 * 判断是否是图片
 */
function isPicture(suffix) {
    let flag = false;
    if(!suffix){
        return flag;
    }
    let arr = ["bmp", "dib", "gif", "jfif", "jpe", "jpeg", "jpg", "png", "tif", "tiff", "ico"];
    let number = arr.indexOf(suffix);
    // -1 表示没找到
    if(-1 != number){
        return true;
    }
    return flag;
}

var layer;
var notice;
var table;
var form;
var util;
var nprogress;
/**
 * 加载Layui常用组件
 */
layui.use(['layer', 'notice', 'form', 'util', 'nprogress'], function () {
    layer = layui.layer;
    notice = layui.notice;
    form = layui.form;
    util = layui.util;
    nprogress = layui.nprogress;

    /**
     * 页面加载进度条
     */
    nprogress.start();
    if (document.readyState == "complete" || document.readyState == "interactive") {
        // 进度条结束
        nprogress.done();
    }

    /**
     * 回到顶部
     */
    util.fixbar({});

    /**
     * 鼠标移入，显示弹窗
     */
    let tipsIndex;
    $('body').on('mouseover', 'tbody .layui-table-cell', function () {
        let that = this;
        if (!$(this).hasClass('laytable-cell-numbers') && 0 == $(this).find('.toolbar_span').length && !!filterHTMLTag($(this).html())) {
            tipsIndex = layer.tips(filterHTMLTag($(this).html()), that, {tips: [1, '#1890ff'], time: 5000});
        }
    });

    /**
     * 鼠标移出，关闭弹窗
     */
    $('body').on('mouseout', 'tbody .layui-table-cell', function () {
        if (!$(this).hasClass('laytable-cell-numbers') && 0 == $(this).find('.toolbar_span').length && !!filterHTMLTag($(this).html())) {
            layer.close(tipsIndex);
        }
    });

    /**
     * 双击复制表格内容
     */
    let copyIndex;
    $('body').on('dblclick', 'tbody .layui-table-cell', function () {
        if (!$(this).hasClass('laytable-cell-numbers') && 0 == $(this).find('.toolbar_span').length && !!filterHTMLTag($(this).html())) {
            // 内容
            let text = filterHTMLTag($(this).html());
            // 创建一个input，赋值，选中，赋值，删除input
            let oInput = document.createElement('input');
            oInput.value = text;
            $(oInput).css({opacity: '0'});
            $(oInput).attr({name: "__copy_secukey"});
            document.body.appendChild(oInput);
            // 选择对象
            oInput.select();
            // 复制
            document.execCommand("Copy");
            oInput.className = 'oInput';
            // 删除元素
            $("input[name='__copy_secukey']").remove();
            copyIndex = layer.msg('已复制', {offset: 't'});
        }
    });
});

/**
 * Ajax请求
 */
const Asurplus = {
    /**
     * GET 请求
     */
    get(options, succback, failback, errback) {
        if (!options.url) {
            notice.error('请求错误');
            return false;
        }
        options.type = 'GET'
        options.timeout = options.timeout || 5000
        options.async = options.async || true
        options.cache = options.cache || false
        options.dataType = options.dataType || 'json'
        options.contentType = options.contentType || 'application/json'
        options.succMsg = options.succMsg || false
        options.failMsg = options.failMsg || false
        options.errMsg = options.errMsg || false
        let index = layer.load(2, {shade: 0.1});
        $.ajax({
            url: options.url,
            type: options.type,
            timeout: options.timeout,
            async: options.async,
            cache: options.cache,
            dataType: options.dataType,
            success: function (res) {
                layer.close(index);
                if (200 === res.code) {
                    layer.closeAll('dialog');
                    if (!options.succMsg) {
                        notice.success(res.msg);
                    }
                    // 成功回调
                    if (!!succback) {
                        succback(res);
                    }
                } else {
                    if (!options.failMsg) {
                        notice.warning(res.msg);
                    }
                    // 失败回调
                    if (!!res) {
                        failback(res);
                    }
                }
            },
            error: function (res) {
                layer.close(index);
                if (!options.errMsg) {
                    notice.warning(res.msg);
                }
                else {
                    notice.error("服务器异常！");
                }
                // 错误回调
                if (!!errback) {
                    errback(res);
                }
            }
        });
    },
    /**
     * POST 请求
     */
    post(options, succback, errback) {
        if (!options.url) {
            notice.error('请求错误');
            return false;
        }
        options.type = 'POST'
        options.timeout = options.timeout || 5000
        options.async = options.async || true
        options.cache = options.cache || false
        options.dataType = options.dataType || 'json'
        options.contentType = options.contentType || 'application/json'
        options.data = options.data || ''
        options.succMsg = options.succMsg || false
        options.failMsg = options.failMsg || false
        options.errMsg = options.errMsg || false
        let index = layer.load(2, {shade: 0.1});
        $.ajax({
            url: options.url,
            type: options.type,
            timeout: options.timeout,
            async: options.async,
            cache: options.cache,
            dataType: options.dataType,
            data: options.data,
            contentType: options.contentType,
            success: function (res) {
                layer.close(index);
                if (200 === res.code) {
                    layer.closeAll('dialog');
                    if (!options.succMsg) {
                        notice.success(res.msg);
                    }
                    // 成功回调
                    if (!!succback) {
                        succback(res);
                    }
                } else {
                    if (!options.failMsg) {
                        notice.warning(res.msg);
                    }
                    // 失败回调
                    if (!!errback) {
                        errback(res);
                    }
                }
            },
            error: function (res) {
                layer.close(index);
                if (!options.errMsg) {
                    notice.warning(res.msg);
                }
                else {
                    notice.error("服务器异常！");
                }
                // 错误回调
                if (!!errback) {
                    errback(res);
                }
            }
        });
    },
    /**
     * 上传文件
     */
    upload(options, succback, errback) {
        if (!options.url) {
            notice.error('请求错误');
            return false;
        }
        options.type = options.type || 'POST'
        options.timeout = options.timeout || 5000
        options.async = options.async || true
        options.cache = options.cache || false
        options.dataType = options.dataType || 'json'
        options.data = options.data || ''
        options.dir = options.dir || ''
        options.processData = options.processData || false
        options.contentType = options.contentType || false
        options.succMsg = options.succMsg || false
        options.failMsg = options.failMsg || false
        options.errMsg = options.errMsg || false
        let index = layer.load(2, {shade: 0.1});
        $.ajax({
            url: options.url,
            type: options.type,
            cache: options.cache,
            dataType: options.dataType,
            data: options.data,
            headers: {'Upload-dir': options.dir},
            processData: options.processData,
            contentType: options.contentType,
            success: function (res) {
                layer.close(index);
                if (200 === res.code) {
                    if (!options.succMsg) {
                        notice.success(res.msg);
                    }
                    // 成功回调
                    if (!!succback) {
                        succback(res);
                    }
                } else {
                    if (!options.failMsg) {
                        notice.warning(res.msg);
                    }
                    // 失败回调
                    if (!!errback) {
                        errback(res);
                    }
                }
            },
            error: function (res) {
                layer.close(index);
                if (!options.errMsg) {
                    notice.warning(res.msg);
                }
                else {
                    notice.error("服务器异常！");
                }
                // 错误回调
                if (!!errback) {
                    errback(res);
                }
            }
        });
    },
    /**
     * 渲染表格
     */
    tableRender(options) {
        if (!options.url) {
            notice.error('请求错误');
            return false;
        }
        if (!options.table) {
            notice.error('请求错误');
            return false;
        }
        table = options.table
        options.elem = options.elem || '#currentTableId'
        options.id = options.id || 'currentTableId'
        options.method = options.method || 'POST'
        options.toolbar = null != options.toolbar? options.toolbar : '#toolbarDemo'
        // options.height = options.height || $(document).height() - $('.table-search-fieldset').height() - 80
        options.defaultToolbar = options.defaultToolbar || ['filter', 'exports', 'print']
        options.limits = options.limits || [10, 15, 20, 25, 50, 100]
        options.limit = options.limit || 20
        options.page = options.page ? options.page : true
        /**
         * 表格搜索操作
         */
        form.on('submit(data-search-btn)', function (data) {
            // 执行搜索重载
            table.reload('currentTableId', {
                page: {
                    curr: 1
                }
                , where: form.val("search-form")
            }, 'data');
            return false;
        });

        /**
         * 表格重置搜索
         */
        form.on('submit(data-reset-btn)', function (data) {
            // 清空
            $("#search-form")[0].reset();
            // 执行搜索重载
            table.reload('currentTableId', {
                page: {
                    curr: 1
                }
                , where: form.val("search-form")
            }, 'data');
            return false;
        });

        /**
         * 表格行单击事件
         */
        table.on('row(currentTableFilter)', function (obj) {
            // 标注选中样式
            obj.tr.addClass('layui-table-click').siblings().removeClass('layui-table-click');
        });

        /**
         * 表格行双击事件
         */
        table.on('rowDouble(currentTableFilter)', function(obj){

        });
        /**
         * 渲染表格
         */
        return options.table.render(options)
    },
    /**
     * 打开新增、修改页面
     */
    openLayer(options, callback) {
        if (!options.content) {
            notice.error('请求错误');
            return false;
        }
        options.type = options.type || 2
        options.title = options.title || '新页面'
        options.shadeClose = options.shadeClose || false
        options.shade = options.shade || 0.5
        options.area = options.area || ['45%', '100%']
        options.offset = options.offset || 'r'
        options.anim = options.anim || 2
        layer.open({
            type: options.type,
            title: options.title,
            shadeClose: options.shadeClose,
            shade: options.shade,
            area: options.area,
            content: options.content,
            offset: options.offset,
            anim: options.anim,
            end: function (index, layero) {
                if (!!callback) {
                    callback();
                }
            }
        });
    }
}
